using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TerritoryDesignTools._TerritorySolution
{
    /// <summary>
    /// <para>Import Territory Solution</para>
    /// <para>Creates a new territory solution and imports the territories hierarchy from a table or a layer.</para>
    /// <para>创建新的区域解决方案，并从表或图层导入区域层次结构。</para>
    /// </summary>    
    [DisplayName("Import Territory Solution")]
    public class ImportTerritorySolution : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ImportTerritorySolution()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_data">
        /// <para>Input Data</para>
        /// <para>The layer or records to be imported.</para>
        /// <para>要导入的图层或记录。</para>
        /// </param>
        /// <param name="_solution_name">
        /// <para>Territory Solution Name</para>
        /// <para>The name of the territory solution to be created.</para>
        /// <para>要创建的 territory 解决方案的名称。</para>
        /// </param>
        /// <param name="_level_settings">
        /// <para>Level Settings</para>
        /// <para><xdoc>
        ///   <para>The level settings for importing the territories hierarchy.</para>
        ///   <para>Level Name—The name of the level (required).</para>
        ///   <para>Default Territory Name—The prefix for the new territory that will, subsequently, be created at the level (optional).</para>
        ///   <para>ID Field—The field that contains IDs (unique IDs) for territories (required).</para>
        ///   <para>Name Field—The field that contains names for territories (optional).</para>
        ///   <para>Parent ID Field—The field that contains IDs of parent territories (optional).</para>
        ///   <para>Primary Feature Class—Specifies the class level that will be used for storing level attributes (optional).
        ///   <bulletList>
        ///     <bullet_item>Territory Boundaries—Level attributes will be stored using the boundaries of the territory solution.  </bullet_item><para/>
        ///     <bullet_item>Territory Centers—Level attributes will be stored using the boundary centers of the territory solution.  </bullet_item><para/>
        ///     <bullet_item>Base Boundaries—Level attributes will be stored using the boundaries of the base layer.  </bullet_item><para/>
        ///     <bullet_item>Base Centers—Level attributes will be stored using the boundary centers of the base layer.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于导入 territories 层次结构的级别设置。</para>
        ///   <para>级别名称 - 级别名称（必填）。</para>
        ///   <para>默认区域名称 - 随后将在级别（可选）创建的新区域的前缀。</para>
        ///   <para>ID 字段 - 包含区域（必填）的 ID（唯一 ID）的字段。</para>
        ///   <para>名称字段 - 包含区域名称的字段（可选）。</para>
        ///   <para>父 ID 字段 - 包含父区域 ID 的字段（可选）。</para>
        /// <para>主要素类 - 指定将用于存储标高属性的类标高（可选）。
        ///   <bulletList>
        ///     <bullet_item>区域边界 - 将使用区域解决方案的边界存储级别属性。</bullet_item><para/>
        ///     <bullet_item>Territory Centers—将使用区域解决方案的边界中心存储级别属性。</bullet_item><para/>
        ///     <bullet_item>基础边界 - 将使用基础图层的边界存储级别属性。</bullet_item><para/>
        ///     <bullet_item>基础中心 - 将使用基础图层的边界中心存储级别属性。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        public ImportTerritorySolution(object _in_data, object _solution_name, object _level_settings)
        {
            this._in_data = _in_data;
            this._solution_name = _solution_name;
            this._level_settings = _level_settings;
        }
        public override string ToolboxName => "Territory Design Tools";

        public override string ToolName => "Import Territory Solution";

        public override string CallName => "td.ImportTerritorySolution";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_data, _solution_name, _level_settings, _out_territory_solution];

        /// <summary>
        /// <para>Input Data</para>
        /// <para>The layer or records to be imported.</para>
        /// <para>要导入的图层或记录。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Data")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_data { get; set; }


        /// <summary>
        /// <para>Territory Solution Name</para>
        /// <para>The name of the territory solution to be created.</para>
        /// <para>要创建的 territory 解决方案的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Territory Solution Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _solution_name { get; set; }


        /// <summary>
        /// <para>Level Settings</para>
        /// <para><xdoc>
        ///   <para>The level settings for importing the territories hierarchy.</para>
        ///   <para>Level Name—The name of the level (required).</para>
        ///   <para>Default Territory Name—The prefix for the new territory that will, subsequently, be created at the level (optional).</para>
        ///   <para>ID Field—The field that contains IDs (unique IDs) for territories (required).</para>
        ///   <para>Name Field—The field that contains names for territories (optional).</para>
        ///   <para>Parent ID Field—The field that contains IDs of parent territories (optional).</para>
        ///   <para>Primary Feature Class—Specifies the class level that will be used for storing level attributes (optional).
        ///   <bulletList>
        ///     <bullet_item>Territory Boundaries—Level attributes will be stored using the boundaries of the territory solution.  </bullet_item><para/>
        ///     <bullet_item>Territory Centers—Level attributes will be stored using the boundary centers of the territory solution.  </bullet_item><para/>
        ///     <bullet_item>Base Boundaries—Level attributes will be stored using the boundaries of the base layer.  </bullet_item><para/>
        ///     <bullet_item>Base Centers—Level attributes will be stored using the boundary centers of the base layer.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于导入 territories 层次结构的级别设置。</para>
        ///   <para>级别名称 - 级别名称（必填）。</para>
        ///   <para>默认区域名称 - 随后将在级别（可选）创建的新区域的前缀。</para>
        ///   <para>ID 字段 - 包含区域（必填）的 ID（唯一 ID）的字段。</para>
        ///   <para>名称字段 - 包含区域名称的字段（可选）。</para>
        ///   <para>父 ID 字段 - 包含父区域 ID 的字段（可选）。</para>
        /// <para>主要素类 - 指定将用于存储标高属性的类标高（可选）。
        ///   <bulletList>
        ///     <bullet_item>区域边界 - 将使用区域解决方案的边界存储级别属性。</bullet_item><para/>
        ///     <bullet_item>Territory Centers—将使用区域解决方案的边界中心存储级别属性。</bullet_item><para/>
        ///     <bullet_item>基础边界 - 将使用基础图层的边界存储级别属性。</bullet_item><para/>
        ///     <bullet_item>基础中心 - 将使用基础图层的边界中心存储级别属性。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Level Settings")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _level_settings { get; set; }


        /// <summary>
        /// <para>Output Territory Solution</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Territory Solution")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_territory_solution { get; set; }


        public ImportTerritorySolution SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}